911. Квадратное уравнение
Решите квадратное
уравнение ax2 + bx + c
= 0 (a ≠ 0).
Вход. В одной строке заданы три целых числа – коэффициенты
квадратного уравнения a, b и c.
Значения всех коэффициентов по модулю не превышают 100.
Выход. В одной строке выведите:
·
“No roots”, если уравнение не имеет корней;
·
“One root:” и через пробел сам корень, если уравнение имеет один корень;
·
“Two roots:” и через пробел сначала меньший, а потом больший корень, если
уравнение имеет два корня.
Гарантируется, что в случае
наличия решений все корни целочисленные.
Пример
входа 1 |
Пример
выхода 1 |
1 -5 6 |
Two roots: 2
3 |
|
|
Пример
входа 2 |
Пример
выхода 2 |
1 2 10 |
No roots |
математика
В задаче следует
решить квадратное уравнение по формуле
,
где d – дискриминант квадратного уравнения,
равный b2 – 4ac.
В зависимости от
знака дискриминанта возможны три случая:
·
d < 0,
уравнение не имеет корней;
·
d = 0, уравнение
имеет один корень;
·
d > 0: уравнение
имеет два корня, которые следует вывести в порядке возрастания;
Реализация алгоритма
Поскольку коэффициенты уравнения и его корни (в случае их
наличия) целочисленные, то все вычисления будем проводить в целых числах. Читаем
входные данные.
scanf("%d %d %d", &a, &b, &c);
Вычисляем дискриминант квадратного уравнения.
d = b * b - 4 *
a * c;
В зависимости от
знака дискриминанта выводим ответ.
if (d < 0)
printf("No
roots\n");
else if
(d == 0)
{
x1 = -b / (2 * a);
printf("One
root: %d\n", x1);
}
else
{
x1 = (-b - sqrt(1.0*d)) / (2 * a);
x2 = (-b + sqrt(1.0*d)) / (2 * a);
printf("Two
roots: ");
if (x1 <
x2)
printf("%d
%d\n", x1, x2);
else
printf("%d
%d\n", x2, x1);
}
Java реализация
import java.util.*;
public class Main
{
public static void
main(String []args)
{
Scanner con = new
Scanner(System.in);
int a = con.nextInt();
int b = con.nextInt();
int c = con.nextInt();
int d = b * b - 4
* a * c;
double x1 = (-b -
Math.sqrt(1.0 * d)) / (2 * a);
double x2 = (-b +
Math.sqrt(1.0 * d)) / (2 * a);
if (d ==
0)
System.out.printf("One
root: %.0f\n", x1);
else if (d <
0)
System.out.printf("No
roots\n");
else if (x1 <
x2)
System.out.printf("Two
roots: %.0f %.0f\n", x1, x2);
else
System.out.printf("Two
roots: %.0f %.0f\n ", x2, x1);
con.close();
}
}
Python реализация
import math
Поскольку коэффициенты уравнения и его корни (в случае их
наличия) целочисленные, то все вычисления будем проводить в целых числах. Читаем
входные данные.
a, b, c = map(int, input().split())
Вычисляем дискриминант квадратного уравнения.
d = b * b - 4 * a * c
В зависимости от
знака дискриминанта выводим ответ.
if d < 0:
print("No roots")
elif d == 0:
x1 = -b // (2 * a)
print("One root:", x1)
else:
x1 = int((-b - math.sqrt(d)) // (2
* a))
x2 = int((-b + math.sqrt(d)) // (2
* a))
print("Two roots:", min(x1, x2), max(x1, x2))